/**
 * Author@ Cheng Feitian
 * Date: 2021-4-8
 * Description: 函数模板的注意事项
 */

#include <algorithm>
#include <iostream>
#include <string>

using namespace std;
const int maxn = 1024;

//函数模板可以用typename 类模板可以使用 class
template<typename T>    //typename 可以替换成 class
void mySwap(T & a,T & b){
    T temp = a;
    a = b;
    b = temp;
}

/**
 * @brief 函数模板注意事项
 * 1.自动类型推导，必须推导出一致的数据类型T才可以使用
 * 2.模板必须要确定出T的数据类型，才可以使用
 */

void test01(){
    int a = 10;
    int b = 20;
    char c = 'c';

    mySwap(a,b);
    // 1.自动类型推导，必须推导出一致的数据类型T才可以使用
    // mySwap(a,c);    //错误,推导不出一致的T类型
    cout << "a = " << a << "\tb = " << b << endl;
}
// 2.模板必须要确定出T的数据类型，才可以使用
template<typename T>
void func(){
    cout << "func函数调用！" << endl;
}

void test02(){
    func<int>();
}

int main()
{
    // test01();
    test02();
    return 0;
}
